package com.sky.controller.admin;

import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/admin/common")
//  公共接口用来处理文件上传,将前端上传的文件存储到服务器的指定目录中,并返回文件访问的URL方便后续处理.  如显示图片。(如将图片URL放数据库里等)
public class CommonController {
// 使用 @Autowired 注解，自动注入 AliOssUtil 工具类（用于操作阿里云 OSS）
@Autowired
private AliOssUtil aliOssUtil;

// 定义一个请求映射方法，处理 "/upload" 的 HTTP 请求（GET/POST 都可以）
@RequestMapping("/upload")
public Result upload(MultipartFile file) {
    // 获取上传文件的原始名称（用户本地电脑上的文件名）
    String originalFilename = file.getOriginalFilename();
    // 输出日志，记录当前正在上传的文件名
    log.info("文件上传开始,上传的文件名:{}", originalFilename);
    // 获取文件的后缀名（例如 .jpg、.png）
    // lastIndexOf(".") 找到最后一个点的位置，substring() 取出从这个位置到结尾的部分
    String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    // 生成唯一的新文件名，避免重复：
    // 使用 UUID.randomUUID() 生成随机字符串 + 原始文件名 + 后缀名
    String objectName = UUID.randomUUID().toString() + originalFilename + suffix;
    // 准备一个变量保存上传后的访问 URL（初始为 null）
    String url = null;
    // 开始尝试将文件上传到阿里云 OSS
    try {
        // 将上传的 MultipartFile 转换为字节数组 getBytes()
        // 然后调用 aliOssUtil.upload() 方法上传到 OSS，并返回访问地址
        url = aliOssUtil.upload(file.getBytes(), objectName);
    } catch (IOException e) {
        // 如果上传过程中发生异常（如读取文件失败），捕获并打印错误日志
        log.info("文件{}上传失败", originalFilename);
    }
    // 最终返回一个统一格式的响应结果（Result 是封装好的通用返回对象）
    // 如果上传成功，url 有值；如果失败，url 为 null 或抛出异常时也返回 null
    return Result.success(url);
}

}
